
#include <iostream>

using namespace std;

void func2(int& x) { cout << "func2(int& x)" << endl; }
void func2(const int& x) { cout << "func2(const int& x)" << endl; }
void func2(int&& x) { cout << "func2(int&& x)" << endl; }
void func2(const int&& x) { cout << "func2(const int&& x)" << endl; }

template<class T>
void func1(T&& x)
{
    func2(forward<T>(x));
}

int main()
{
    int a = 10;
    func1(a);
    func1(move(a));

    const int b = 20;
    func1(b);
    func1(move(b));

    return 0;
}
